Resolve mismatch between accelerometry and clinical data

sortOrder<-sort(studyPatientsPY,index.return=TRUE)$ix
PYpatient_table<-patient_table[sortOrder,]
PY_1yr_patient_table<-PYpatient_table %>% drop_na(Death_1yr)

Organize sensors data

Please note that the following chunk takes about 4.5 minutes to run

start_time <- Sys.time()
temp_var<-do.call(rbind,sensors)
#ranked_temp_var<-lapply(temp_var, function(x) t(apply(x,1,sort,decreasing = TRUE)))
#fft_temp_var<-lapply(temp_var, function(x) abs(t(mvfft(t(x)))))
band_powerFeats<-do.call(cbind,temp_var[1:6])
freq_entropyFeats<-do.call(cbind,temp_var[7:12])
freq_pairsFeats<-do.call(cbind,temp_var[13:24])
med_freqFeats<-do.call(cbind,temp_var[25:30])
smaFeats<-do.call(cbind,temp_var[31:36])
waveletsFeats<-do.call(cbind,temp_var[37:42])
end_time <- Sys.time()
end_time - start_time
## Time difference of 0.1735451 secs

Run Linear Optimal Low Rank Projection

# GOSE at Discharge
r<-5
Y<-PYpatient_table$GOSE
band_powerLOL_GOSE <- lol.project.lol(band_powerFeats, Y, r)
freq_entropyLOL_GOSE <- lol.project.lol(freq_entropyFeats, Y, r)
freq_pairsLOL_GOSE <- lol.project.lol(freq_pairsFeats, Y, r)
med_freqLOL_GOSE <- lol.project.lol(med_freqFeats, Y, r)
smaLOL_GOSE <- lol.project.lol(smaFeats, Y, r)
waveletsLOL_GOSE <- lol.project.lol(waveletsFeats, Y, r)

# 5 fold cross validation
bandPowerLOL_GOSE_kfold <- lol.xval.eval(band_powerFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
## Warning in split.default(samp.ids, rep(1:k), drop = TRUE): data length is not a
## multiple of split variable
freq_entropyLOL_GOSE_kfold <- lol.xval.eval(freq_entropyFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
## Warning in split.default(samp.ids, rep(1:k), drop = TRUE): data length is not a
## multiple of split variable
freq_pairsLOL_GOSE_kfold <- lol.xval.eval(freq_pairsFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
## Warning in split.default(samp.ids, rep(1:k), drop = TRUE): data length is not a
## multiple of split variable
med_freqLOL_GOSE_kfold <- lol.xval.eval(med_freqFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
## Warning in split.default(samp.ids, rep(1:k), drop = TRUE): data length is not a
## multiple of split variable
smaLOL_GOSE_kfold <- lol.xval.eval(smaFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
## Warning in split.default(samp.ids, rep(1:k), drop = TRUE): data length is not a
## multiple of split variable
waveletsLOL_GOSE_kfold <- lol.xval.eval(waveletsFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
## Warning in split.default(samp.ids, rep(1:k), drop = TRUE): data length is not a
## multiple of split variable
# GOSE 1 Year after Discharge
r<-5
Y<-PYpatient_table$GOSE_1yr
band_powerLOL_GOSE_1yr <- lol.project.lol(band_powerFeats[!is.na(Y),], Y[!is.na(Y)], r)
freq_entropyLOL_GOSE_1yr <- lol.project.lol(freq_entropyFeats[!is.na(Y),], Y[!is.na(Y)], r)
freq_pairsLOL_GOSE_1yr <- lol.project.lol(freq_pairsFeats[!is.na(Y),], Y[!is.na(Y)], r)
med_freqLOL_GOSE_1yr <- lol.project.lol(med_freqFeats[!is.na(Y),], Y[!is.na(Y)], r)
smaLOL_GOSE_1yr <- lol.project.lol(smaFeats[!is.na(Y),], Y[!is.na(Y)], r)
waveletsLOL_GOSE_1yr <- lol.project.lol(waveletsFeats[!is.na(Y),], Y[!is.na(Y)], r)

# 5 fold cross validation
# bandPowerLOL_GOSE_1yr_kfold <- lol.xval.eval(band_powerFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# freq_entropyLOL_GOSE_1yr_kfold <- lol.xval.eval(freq_entropyFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# freq_pairsLOL_GOSE_1yr_kfold <- lol.xval.eval(freq_pairsFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# med_freqLOL_GOSE_1yrkfold <- lol.xval.eval(med_freqFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# smaLOL_GOSE_1yr_kfold <- lol.xval.eval(smaFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# waveletsLOL_GOSE_1yr_kfold <- lol.xval.eval(waveletsFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)


# Mortality at Discharge
r<-5
Y<-PYpatient_table$Death
band_powerLOL_Death <- lol.project.lol(band_powerFeats, Y, r)
freq_entropyLOL_Death <- lol.project.lol(freq_entropyFeats, Y, r)
freq_pairsLOL_Death <- lol.project.lol(freq_pairsFeats, Y, r)
med_freqLOL_Death <- lol.project.lol(med_freqFeats, Y, r)
smaLOL_Death <- lol.project.lol(smaFeats, Y, r)
waveletsLOL_Death <- lol.project.lol(waveletsFeats, Y, r)

# 5 fold cross validation
# bandPowerLOL_GOSE_Death_kfold <- lol.xval.eval(band_powerFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# freq_entropyLOL_GOSE_Death_kfold <- lol.xval.eval(freq_entropyFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# freq_pairsLOL_GOSE_Death_kfold <- lol.xval.eval(freq_pairsFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# med_freqLOL_GOSE_Death_kfold <- lol.xval.eval(med_freqFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# smaLOL_GOSE_Death_kfold <- lol.xval.eval(smaFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# waveletsLOL_GOSE_Death_kfold <- lol.xval.eval(waveletsFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)

# Mortality within 1 Year after Discharge
r<-5
Y<-PYpatient_table$Death_1yr
band_powerLOL_Death_1yr <- lol.project.lol(band_powerFeats[!is.na(Y),], Y[!is.na(Y)], r)
freq_entropyLOL_Death_1yr <- lol.project.lol(freq_entropyFeats[!is.na(Y),], Y[!is.na(Y)], r)
freq_pairsLOL_Death_1yr <- lol.project.lol(freq_pairsFeats[!is.na(Y),], Y[!is.na(Y)], r)
med_freqLOL_Death_1yr <- lol.project.lol(med_freqFeats[!is.na(Y),], Y[!is.na(Y)], r)
smaLOL_Death_1yr <- lol.project.lol(smaFeats[!is.na(Y),], Y[!is.na(Y)], r)
waveletsLOL_Death_1yr <- lol.project.lol(waveletsFeats[!is.na(Y),], Y[!is.na(Y)], r)

# 5 fold cross validation
# bandPowerLOL_GOSE_Death_1yr_kfold <- lol.xval.eval(band_powerFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# freq_entropyLOL_GOSE_Death_1yr_kfold <- lol.xval.eval(freq_entropyFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# freq_pairsLOL_GOSE_Death_1yr_kfold <- lol.xval.eval(freq_pairsFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# med_freqLOL_GOSE_Death_1yr_kfold <- lol.xval.eval(med_freqFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# smaLOL_GOSE_Death_1yr_kfold <- lol.xval.eval(smaFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)
# waveletsLOL_GOSE_Death_1yr_kfold <- lol.xval.eval(waveletsFeats, Y, r, alg = lol.project.lol, alg.return="A", classifier=MASS::lda, classifier.return="class", k=5)

Visualize GOSE at Discharge LOL projections

Visualize GOSE 1 Year after discharge LOL projections

Visualize Mortality at discharge LOL projections

Visualize Mortality within 1 year of discharge LOL projections